home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / glib-2.0 / gobject / gparam.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  8.3 KB  |  234 lines

  1. /* GObject - GLib Type, Object, Parameter and Signal Library
  2.  * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Lesser General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * Lesser General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Lesser General
  15.  * Public License along with this library; if not, write to the
  16.  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  17.  * Boston, MA 02111-1307, USA.
  18.  *
  19.  * gparam.h: GParamSpec base class implementation
  20.  */
  21. #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
  22. #error "Only <glib-object.h> can be included directly."
  23. #endif
  24.  
  25. #ifndef __G_PARAM_H__
  26. #define __G_PARAM_H__
  27.  
  28. #include    <gobject/gvalue.h>
  29.  
  30. G_BEGIN_DECLS
  31.  
  32. /* --- standard type macros --- */
  33. #define G_TYPE_IS_PARAM(type)        (G_TYPE_FUNDAMENTAL (type) == G_TYPE_PARAM)
  34. #define G_PARAM_SPEC(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  35. #define G_IS_PARAM_SPEC(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM))
  36. #define G_PARAM_SPEC_CLASS(pclass)      (G_TYPE_CHECK_CLASS_CAST ((pclass), G_TYPE_PARAM, GParamSpecClass))
  37. #define G_IS_PARAM_SPEC_CLASS(pclass)   (G_TYPE_CHECK_CLASS_TYPE ((pclass), G_TYPE_PARAM))
  38. #define G_PARAM_SPEC_GET_CLASS(pspec)    (G_TYPE_INSTANCE_GET_CLASS ((pspec), G_TYPE_PARAM, GParamSpecClass))
  39.  
  40.  
  41. /* --- convenience macros --- */
  42. #define G_PARAM_SPEC_TYPE(pspec)    (G_TYPE_FROM_INSTANCE (pspec))
  43. #define G_PARAM_SPEC_TYPE_NAME(pspec)    (g_type_name (G_PARAM_SPEC_TYPE (pspec)))
  44. #define    G_PARAM_SPEC_VALUE_TYPE(pspec)    (G_PARAM_SPEC (pspec)->value_type)
  45. #define G_VALUE_HOLDS_PARAM(value)    (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_PARAM))
  46.        
  47.  
  48. /* --- flags --- */
  49. typedef enum
  50. {
  51.   G_PARAM_READABLE            = 1 << 0,
  52.   G_PARAM_WRITABLE            = 1 << 1,
  53.   G_PARAM_CONSTRUCT          = 1 << 2,
  54.   G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
  55.   G_PARAM_LAX_VALIDATION      = 1 << 4,
  56.   G_PARAM_STATIC_NAME          = 1 << 5,
  57. #ifndef G_DISABLE_DEPRECATED
  58.   G_PARAM_PRIVATE          = G_PARAM_STATIC_NAME,
  59. #endif
  60.   G_PARAM_STATIC_NICK          = 1 << 6,
  61.   G_PARAM_STATIC_BLURB          = 1 << 7
  62. } GParamFlags;
  63. #define    G_PARAM_READWRITE    (G_PARAM_READABLE | G_PARAM_WRITABLE)
  64. #define    G_PARAM_MASK        (0x000000ff)
  65. /* bits in the range 0xffffff00 are reserved for 3rd party usage */
  66. #define    G_PARAM_USER_SHIFT    (8)
  67.  
  68.  
  69. /* --- typedefs & structures --- */
  70. typedef struct _GParamSpec      GParamSpec;
  71. typedef struct _GParamSpecClass GParamSpecClass;
  72. typedef struct _GParameter    GParameter;
  73. typedef struct _GParamSpecPool  GParamSpecPool;
  74. struct _GParamSpec
  75. {
  76.   GTypeInstance  g_type_instance;
  77.  
  78.   gchar         *name;
  79.   GParamFlags    flags;
  80.   GType         value_type;
  81.   GType         owner_type;    /* class or interface using this property */
  82.  
  83.   /*< private >*/
  84.   gchar         *_nick;
  85.   gchar         *_blurb;
  86.   GData        *qdata;
  87.   guint          ref_count;
  88.   guint         param_id;    /* sort-criteria */
  89. };
  90. struct _GParamSpecClass
  91. {
  92.   GTypeClass      g_type_class;
  93.  
  94.   GType          value_type;
  95.  
  96.   void            (*finalize)        (GParamSpec   *pspec);
  97.  
  98.   /* GParam methods */
  99.   void          (*value_set_default)    (GParamSpec   *pspec,
  100.                      GValue       *value);
  101.   gboolean      (*value_validate)       (GParamSpec   *pspec,
  102.                      GValue       *value);
  103.   gint          (*values_cmp)           (GParamSpec   *pspec,
  104.                      const GValue *value1,
  105.                      const GValue *value2);
  106.   /*< private >*/
  107.   gpointer      dummy[4];
  108. };
  109. struct _GParameter /* auxillary structure for _setv() variants */
  110. {
  111.   const gchar *name;
  112.   GValue       value;
  113. };
  114.  
  115.  
  116. /* --- prototypes --- */
  117. GParamSpec*    g_param_spec_ref        (GParamSpec    *pspec);
  118. void        g_param_spec_unref        (GParamSpec    *pspec);
  119. void        g_param_spec_sink        (GParamSpec    *pspec);
  120. gpointer        g_param_spec_get_qdata        (GParamSpec    *pspec,
  121.                          GQuark         quark);
  122. void            g_param_spec_set_qdata        (GParamSpec    *pspec,
  123.                          GQuark         quark,
  124.                          gpointer       data);
  125. void            g_param_spec_set_qdata_full    (GParamSpec    *pspec,
  126.                          GQuark         quark,
  127.                          gpointer       data,
  128.                          GDestroyNotify destroy);
  129. gpointer        g_param_spec_steal_qdata    (GParamSpec    *pspec,
  130.                          GQuark         quark);
  131. GParamSpec*     g_param_spec_get_redirect_target (GParamSpec   *pspec);
  132.  
  133. void        g_param_value_set_default    (GParamSpec    *pspec,
  134.                          GValue           *value);
  135. gboolean    g_param_value_defaults        (GParamSpec    *pspec,
  136.                          GValue           *value);
  137. gboolean    g_param_value_validate        (GParamSpec    *pspec,
  138.                          GValue           *value);
  139. gboolean    g_param_value_convert        (GParamSpec    *pspec,
  140.                          const GValue  *src_value,
  141.                          GValue           *dest_value,
  142.                          gboolean    strict_validation);
  143. gint        g_param_values_cmp        (GParamSpec    *pspec,
  144.                          const GValue  *value1,
  145.                          const GValue  *value2);
  146. G_CONST_RETURN gchar*    g_param_spec_get_name    (GParamSpec    *pspec);
  147. G_CONST_RETURN gchar*    g_param_spec_get_nick    (GParamSpec    *pspec);
  148. G_CONST_RETURN gchar*    g_param_spec_get_blurb    (GParamSpec    *pspec);
  149. void            g_value_set_param               (GValue           *value,
  150.                          GParamSpec    *param);
  151. GParamSpec*     g_value_get_param               (const GValue  *value);
  152. GParamSpec*     g_value_dup_param               (const GValue  *value);
  153.  
  154.  
  155. void           g_value_take_param               (GValue        *value,
  156.                              GParamSpec    *param);
  157. #ifndef G_DISABLE_DEPRECATED
  158. void           g_value_set_param_take_ownership (GValue        *value,
  159.                              GParamSpec    *param);
  160. #endif
  161.  
  162. /* --- convenience functions --- */
  163. typedef struct _GParamSpecTypeInfo GParamSpecTypeInfo;
  164. struct _GParamSpecTypeInfo
  165. {
  166.   /* type system portion */
  167.   guint16         instance_size;                               /* obligatory */
  168.   guint16         n_preallocs;                                 /* optional */
  169.   void        (*instance_init)    (GParamSpec   *pspec); /* optional */
  170.  
  171.   /* class portion */
  172.   GType           value_type;                       /* obligatory */
  173.   void          (*finalize)             (GParamSpec   *pspec); /* optional */
  174.   void          (*value_set_default)    (GParamSpec   *pspec,  /* recommended */
  175.                      GValue       *value);
  176.   gboolean      (*value_validate)       (GParamSpec   *pspec,  /* optional */
  177.                      GValue       *value);
  178.   gint          (*values_cmp)           (GParamSpec   *pspec,  /* recommended */
  179.                      const GValue *value1,
  180.                      const GValue *value2);
  181. };
  182. GType    g_param_type_register_static    (const gchar          *name,
  183.                      const GParamSpecTypeInfo *pspec_info);
  184.  
  185. /* For registering builting types */
  186. GType  _g_param_type_register_static_constant (const gchar              *name,
  187.                            const GParamSpecTypeInfo *pspec_info,
  188.                            GType                     opt_type);
  189.  
  190.  
  191. /* --- protected --- */
  192. gpointer    g_param_spec_internal        (GType            param_type,
  193.                          const gchar   *name,
  194.                          const gchar   *nick,
  195.                          const gchar   *blurb,
  196.                          GParamFlags    flags);
  197. GParamSpecPool* g_param_spec_pool_new        (gboolean    type_prefixing);
  198. void        g_param_spec_pool_insert    (GParamSpecPool    *pool,
  199.                          GParamSpec    *pspec,
  200.                          GType         owner_type);
  201. void        g_param_spec_pool_remove    (GParamSpecPool    *pool,
  202.                          GParamSpec    *pspec);
  203. GParamSpec*    g_param_spec_pool_lookup    (GParamSpecPool    *pool,
  204.                          const gchar    *param_name,
  205.                          GType         owner_type,
  206.                          gboolean     walk_ancestors);
  207. GList*        g_param_spec_pool_list_owned    (GParamSpecPool    *pool,
  208.                          GType         owner_type);
  209. GParamSpec**    g_param_spec_pool_list        (GParamSpecPool    *pool,
  210.                          GType         owner_type,
  211.                          guint        *n_pspecs_p);
  212.  
  213.  
  214.  
  215. /* contracts:
  216.  *
  217.  * gboolean value_validate (GParamSpec *pspec,
  218.  *                          GValue     *value):
  219.  *    modify value contents in the least destructive way, so
  220.  *    that it complies with pspec's requirements (i.e.
  221.  *    according to minimum/maximum ranges etc...). return
  222.  *    whether modification was necessary.
  223.  *
  224.  * gint values_cmp (GParamSpec   *pspec,
  225.  *                  const GValue *value1,
  226.  *                  const GValue *value2):
  227.  *    return value1 - value2, i.e. (-1) if value1 < value2,
  228.  *    (+1) if value1 > value2, and (0) otherwise (equality)
  229.  */
  230.  
  231. G_END_DECLS
  232.  
  233. #endif /* __G_PARAM_H__ */
  234.